// 封装的网络请求模块
import { TOKEN_KEY } from "../constants/token-const"; // 导入 token 的命名常量

const token = wx.getStorageSync(TOKEN_KEY); // 获取本地 token

const BASE_URL = 'http://123.207.32.32:9001'; // 请求的接口地址

// 网上的部署好的服务器
const LOGIN_BASE_URL = "http://123.207.32.32:3000"; // 登录请求的接口地址
// 本地部署的服务器
// const LOGIN_BASE_URL = "http://localhost:3000"; // 登录请求的接口地址

// 封装的请求的类
class SMRequest {
	constructor(baseURL, authHeader = {}) {
		this.baseURL = baseURL; // 传递过来的接口地址
		this.authHeader = authHeader; // 要传递的请求头
	}

	// url 是从请求地址；method 是请求方法；params 是请求参数；isAuth 是判难是否需要授权；header 是请求头的内容
	request(url, method, params, isAuth = false, header = {}) {
		// 最终要传递的请求头
		const finalHeader = isAuth ? { ...this.authHeader, ...header} : header;

		return new Promise((resolve, reject) =>{
			wx.request({
				url: this.baseURL + url,
				method: method,
				header: finalHeader,
				data: params,
				success: (res) => {
					resolve(res.data);
				},
				fail: reject
			});
		})
	};

	// 封装的 GET 请求方法
	get(url, params, isAuth = false, header) {
		return this.request(url, 'GET', params, isAuth, header);
	};

	// 封装的 POST 请求方法
	post(url, data, isAuth = false, header) {
		return this.request(url, 'POST', data, isAuth, header);
	};
}

const smRequest = new SMRequest(BASE_URL); // 实例化接口类

// 实例化登录接口类
const smLoginRequest = new SMRequest(LOGIN_BASE_URL, {
	token
}); 

export default smRequest; // 导出接口实例
export {
	smLoginRequest // 导出登录接口实例
}